历届试题 打印十字图  
时间限制：1.0s   内存限制：256.0MB
提交此题   锦囊1   锦囊2
问题描述
小明为某机构设计了一个十字型的徽标（并非红十字会啊），如下所示：

..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
对方同时也需要在电脑dos窗口中以字符的形式输出该标志，并能任意控制层数。

输入格式
一个正整数 n (n<30) 表示要求打印图形的层数。
输出格式
对应包围层数的该标志。
样例输入1
1
样例输出1
..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$..
样例输入2
3
样例输出2
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
提示
请仔细观察样例，尤其要注意句点的数量和输出位置。

#include <iostream>
using namespace std;
int main() {
    int n;
    cin >> n;
    int row = 9 + 4 * (n - 1);
    
    //init
    char a[150][150];
    for(int i = 1; i <= row; i++) {
        for (int j = 1; j <= row; j++) {
            a[i][j] = '.';
        }
    }
    int mid = row / 2 + 1;
    //中间十字架
    for (int i = mid - 2; i <= mid + 2; i++) {
        a[i][mid] = '$';
        a[mid][i] = '$';
    }
    
    //边框十字架
    int tn = n;
    while (tn != 0) {
        int trow = 9 + 4 * (tn - 1);
//        第一行和最后一行，第一列和最后一列
        for (int i = mid - 2 * tn; i <= mid + 2 * tn; i++) {
            a[mid - 2 * (tn + 1)][i] = '$';
            a[mid + 2 * (tn + 1)][i] = '$';
            a[i][mid - 2 * (tn + 1)] = '$';
            a[i][mid + 2 * (tn + 1)] = '$';
        }
        
        //第二行和倒数第二行，第二列和倒数第二列
        a[mid - 2 * tn - 1][mid - 2 * tn] = '$';
        a[mid - 2 * tn - 1][mid + 2 * tn] = '$';
        a[mid - 2 * tn][mid - 2 * tn - 1] = '$';
        a[mid + 2 * tn][mid - 2 * tn - 1] = '$';
        
        a[mid + 2 * tn + 1][mid - 2 * tn] = '$';
        a[mid + 2 * tn + 1][mid + 2 * tn] = '$';
        a[mid - 2 * tn][mid + 2 * tn + 1] = '$';
        a[mid + 2 * tn][mid + 2 * tn + 1] = '$';
        
        //四个拐弯的角
        a[mid - 2 * tn][mid - 2 * tn] = '$';
        a[mid - 2 * tn][mid + 2 * tn] = '$';
        a[mid + 2 * tn][mid - 2 * tn] = '$';
        a[mid + 2 * tn][mid + 2 * tn] = '$';
        
        //上一层
        tn--;
    }
    
    
    //输出
    for (int i = 1; i <= row; i++) {
        for (int j = 1; j <= row; j++) {
            cout << a[i][j];
        }
        cout << endl;
    }
    return 0;
}
